package Terminal.View.Fattura;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import javax.swing.JPanel;

import Terminal.Entity.Dominio.EFattura;
import Terminal.Entity.Dominio.ELineaProgetto;
import Terminal.Entity.Dominio.ELineaRegola;
import Terminal.Entity.Dominio.ELineaSottoprogetto;
import Terminal.Entity.Dominio.ELineaTask;
import Terminal.Entity.Dominio.ELineaTimeRecord;

public class JScontrinoFattura extends JPanel {

	private static final long serialVersionUID = 1L;
	private int lineeFatturaHeight = 0;
	private int lineeStrategiaHeight = 0;	
	
	private JPanel lineeStrategia;
	private JPanel lineeFattura;
	
	public JScontrinoFattura()
	{
		super();
		this.createComponents();
	}

	private void createComponents() {
		
		this.setLayout(null);
		this.setBounds(1,352, 828, 20);
		
		this.setBackground(Color.WHITE);
	}

	public void setLineeStrategia(EFattura fattura)
	{
		JPanel lineeStrategia = new JPanel();
		lineeStrategia.setLayout(new BoxLayout(lineeStrategia,BoxLayout.PAGE_AXIS));
		lineeStrategia.setBackground(Color.white);
		lineeStrategia.setBorder(BorderFactory.createTitledBorder("Regole di fatturazione"));
		
		Component fill = Box.createRigidArea(new Dimension(0,10));
		lineeStrategia.add(fill);
		
		int nLinee = 0;
		for(ELineaRegola lineaRegola : fattura.getRegoleFattura())
		{
			lineeStrategia.add( this.createPannelloLineaRegola(lineaRegola));
			nLinee++;
		}
		
		lineeStrategiaHeight = nLinee *50;
		lineeStrategia.setBounds(14,1,800,lineeStrategiaHeight);
		lineeStrategia.setMinimumSize(new Dimension(800, lineeStrategiaHeight));
		lineeStrategia.setMaximumSize(new Dimension(800, lineeStrategiaHeight));		
		lineeStrategia.setPreferredSize(new Dimension(800, lineeStrategiaHeight));	
		
		int scontrinoAltezza = this.getHeight() + lineeStrategiaHeight;
		
		this.setBounds(1, 362, 828, scontrinoAltezza);
		this.setMinimumSize(new Dimension(828, scontrinoAltezza));
		this.setMaximumSize(new Dimension(828, scontrinoAltezza));		
		this.setPreferredSize(new Dimension(828, scontrinoAltezza));		
		
		if(this.lineeStrategia != null)
		{	
			this.remove(0);
			this.lineeStrategia = lineeStrategia;
			this.add(this.lineeStrategia,0);
		}
		else
		{
			this.lineeStrategia = lineeStrategia;
			this.add(this.lineeStrategia,0);
		}
		
		this.validate();
		this.repaint();	
		
	}
	public void setLineeFattura(EFattura fattura)
	{
		JPanel lineeFattura = new JPanel();
		lineeFattura.setLayout(new BoxLayout(lineeFattura,BoxLayout.PAGE_AXIS));
		lineeFattura.setBackground(Color.white);
		lineeFattura.setBorder(BorderFactory.createTitledBorder("Riepilogo Fattura"));
		
		Component fill = Box.createRigidArea(new Dimension(0,10));
		lineeFattura.add(fill);
		
		lineeFattura.add(creaPannelloLineaProgetto( fattura.getLineeFattura() ));
		
		int nLinee = 1;
		for(ELineaSottoprogetto lineaSottoprogetto : fattura.getLineeFattura().getLineesottoprogetto())
		{
			lineeFattura.add(createPannelloLineaSottoprogetto(lineaSottoprogetto));
			nLinee++;
			
			for(ELineaTask lineaTask : lineaSottoprogetto.getLineetask())
			{
				lineeFattura.add(createPannelloLineaTask(lineaTask));
				nLinee++;
				
				for(ELineaTimeRecord lineaTimeRecord : lineaTask.getLineeTimerecord())
				{
					lineeFattura.add(createPannelloLineaTimeRecord(lineaTimeRecord));
					nLinee++;
				}
			}
		}
		
		lineeFatturaHeight = nLinee * 35;
		lineeFattura.setBounds(14, this.getHeight() + 5, 800, lineeFatturaHeight);		
		lineeFattura.setMinimumSize(new Dimension(800, lineeFatturaHeight));
		lineeFattura.setMaximumSize(new Dimension(800, lineeFatturaHeight));		
		lineeFattura.setPreferredSize(new Dimension(800, lineeFatturaHeight));

		int scontrinoAltezza = this.getHeight() + lineeFatturaHeight + 50;
		
		this.setBounds(1, 362, 828, scontrinoAltezza);
		this.setMinimumSize(new Dimension(828, scontrinoAltezza));
		this.setMaximumSize(new Dimension(828, scontrinoAltezza));		
		this.setPreferredSize(new Dimension(828, scontrinoAltezza));			
		
		if(this.lineeFattura != null)
		{	
			this.remove(1);
			this.lineeFattura = lineeFattura;
			this.add(this.lineeFattura,1);
		}
		else
		{
			this.lineeFattura = lineeFattura;
			this.add(this.lineeFattura,1);
		}
		
		this.validate();
		this.repaint();
	}	
	
	/**
	 * crea pannello per mostrare il costo del progetto
	 * @return JPanel
	 */
	private JPanel creaPannelloLineaProgetto(ELineaProgetto lineaprogetto)
	{
		JPanel jlineaProgetto= new JPanel();
		jlineaProgetto.setBounds(0, 0, 1230, 30);
		jlineaProgetto.setLayout(new BoxLayout(jlineaProgetto, BoxLayout.LINE_AXIS));
		jlineaProgetto.setBackground(Color.WHITE);
		Font font = new Font(this.getFont().getFontName(), Font.BOLD, 16);
		
		Component fillprogetto1 = Box.createRigidArea(new Dimension(75,30));		
		
		JLabel jprogettodesc = new JLabel( "Progetto: " + lineaprogetto.getDescrizione() );
		jprogettodesc.setFont(font);
		jprogettodesc.setMinimumSize(new Dimension(400, 30));
		jprogettodesc.setMaximumSize(new Dimension(400, 30));		
		jprogettodesc.setPreferredSize(new Dimension(400, 30));		
		
		Component fillprogetto2 = Box.createRigidArea(new Dimension(252,30));
		
		JLabel jprogettocosto = new JLabel( lineaprogetto.getCosto() + "" );
		jprogettocosto.setFont(font);
		jprogettocosto.setMinimumSize(new Dimension(60, 30));
		jprogettocosto.setMaximumSize(new Dimension(60, 30));		
		jprogettocosto.setPreferredSize(new Dimension(60, 30));
		
		Component fillprogetto3 = Box.createRigidArea(new Dimension(570,30));	
		
		jlineaProgetto.add(fillprogetto1);		
		jlineaProgetto.add(jprogettodesc);
		jlineaProgetto.add(fillprogetto2);
		jlineaProgetto.add(jprogettocosto);
		jlineaProgetto.add(fillprogetto3);		
		
		return jlineaProgetto;
	}
	
	/**
	 * crea pannello per mostrare il costo dello specifico sottoprogetto
	 * @param lineaSottoprogetto
	 * @return JPanel
	 */
	
	private JPanel createPannelloLineaSottoprogetto(ELineaSottoprogetto lineaSottoprogetto)
	{
		JPanel jlineaSottoprogetto= new JPanel();
		jlineaSottoprogetto.setBounds(0, 0, 1230, 30);
		jlineaSottoprogetto.setLayout(new BoxLayout(jlineaSottoprogetto, BoxLayout.LINE_AXIS));
		jlineaSottoprogetto.setBackground(Color.WHITE);
		Font font = new Font(this.getFont().getFontName(), this.getFont().getStyle(), 16);		
		Color colore = new Color(0,17,38);
		
		Component fillsottoprogetto1 = Box.createRigidArea(new Dimension(100,30));
		
		JLabel jsottoprogettodesc = new JLabel( "Sottoprogetto: " + lineaSottoprogetto.getDescrizione() );
		jsottoprogettodesc.setMinimumSize(new Dimension(400, 30));
		jsottoprogettodesc.setMaximumSize(new Dimension(400, 30));		
		jsottoprogettodesc.setPreferredSize(new Dimension(400, 30));
		jsottoprogettodesc.setForeground(colore);
		jsottoprogettodesc.setFont(font);
		
		Component fillsottoprogetto2 = Box.createRigidArea(new Dimension(227,30));
		
		JLabel jsottoprogettocosto = new JLabel( lineaSottoprogetto.getCosto() + "" );
		jsottoprogettocosto.setMinimumSize(new Dimension(60, 30));
		jsottoprogettocosto.setMaximumSize(new Dimension(60, 30));		
		jsottoprogettocosto.setPreferredSize(new Dimension(60, 30));
		jsottoprogettocosto.setForeground(colore);
		jsottoprogettocosto.setFont(font);
		
		Component fillsottoprogetto3 = Box.createRigidArea(new Dimension(570,30));	
		
		jlineaSottoprogetto.add(fillsottoprogetto1);
		jlineaSottoprogetto.add(jsottoprogettodesc);
		jlineaSottoprogetto.add(fillsottoprogetto2);
		jlineaSottoprogetto.add(jsottoprogettocosto);
		jlineaSottoprogetto.add(fillsottoprogetto3);		
		
		return jlineaSottoprogetto;
	}
	
	/**
	 * crea pannello per mostrare il costro dello specifico task
	 * @param lineaTask
	 * @return JPanel
	 */
	private JPanel createPannelloLineaTask(ELineaTask lineaTask)
	{
		JPanel jlineaTask= new JPanel();
		jlineaTask.setBounds(0, 0, 1230, 30);
		jlineaTask.setLayout(new BoxLayout(jlineaTask, BoxLayout.LINE_AXIS));
		jlineaTask.setBackground(Color.WHITE);
		Font font = new Font(this.getFont().getFontName(), this.getFont().getStyle(), 14);		
		//Color colore = new Color(0,27,135);
		Color colore = new Color(0,20,99);
		
		Component filltask1 = Box.createRigidArea(new Dimension(125,30));		
		
		JLabel jtaskdesc = new JLabel( "Task: " + lineaTask.getDescrizione() );
		jtaskdesc.setMinimumSize(new Dimension(400, 30));
		jtaskdesc.setMaximumSize(new Dimension(400, 30));		
		jtaskdesc.setPreferredSize(new Dimension(400, 30));	
		jtaskdesc.setForeground(colore);
		jtaskdesc.setFont(font);
		
		Component filltask2 = Box.createRigidArea(new Dimension(202,30));
		
		JLabel jtaskcosto = new JLabel( lineaTask.getCosto() + "" );
		jtaskcosto.setMinimumSize(new Dimension(60, 30));
		jtaskcosto.setMaximumSize(new Dimension(60, 30));		
		jtaskcosto.setPreferredSize(new Dimension(60, 30));
		jtaskcosto.setForeground(colore);
		jtaskcosto.setFont(font);
		
		Component filltask3 = Box.createRigidArea(new Dimension(570,30));		
		
		jlineaTask.add(filltask1);
		jlineaTask.add(jtaskdesc);
		jlineaTask.add(filltask2);
		jlineaTask.add(jtaskcosto);
		jlineaTask.add(filltask3);		
		
		return jlineaTask;
	}
	
	/**
	 * crea pannello per mostrare il costro dello specifico sottoprogetto
	 * @param lineaTimerecord
	 * @return JPanel
	 */
	private JPanel createPannelloLineaTimeRecord(ELineaTimeRecord lineaTimeRecord)
	{
		JPanel jlineaTimerecord = new JPanel();
		jlineaTimerecord.setBounds(0, 0, 1000, 30);
		jlineaTimerecord.setLayout(new BoxLayout(jlineaTimerecord, BoxLayout.LINE_AXIS));
		jlineaTimerecord.setBackground(Color.WHITE);
		Font font = new Font(this.getFont().getFontName(), Font.ITALIC, 14);		
		Color colore = new Color(0,31,155);
		
		Component filltimerecord1 = Box.createRigidArea(new Dimension(150,30));		
		
		JLabel jtimerecorddesc = new JLabel( "Time Record: " + lineaTimeRecord.getDescrizione() );
		jtimerecorddesc.setMinimumSize(new Dimension(400, 30));
		jtimerecorddesc.setMaximumSize(new Dimension(400, 30));		
		jtimerecorddesc.setPreferredSize(new Dimension(400, 30));
		jtimerecorddesc.setForeground(colore);
		jtimerecorddesc.setFont(font);
		
		Component filltimerecord2 = Box.createRigidArea(new Dimension(177,30));
		
		JLabel jtimerecordcosto = new JLabel( lineaTimeRecord.getCosto() + "" );
		jtimerecordcosto.setMinimumSize(new Dimension(60, 30));
		jtimerecordcosto.setMaximumSize(new Dimension(60, 30));		
		jtimerecordcosto.setPreferredSize(new Dimension(60, 30));
		jtimerecordcosto.setForeground(colore);
		jtimerecordcosto.setFont(font);
		
		Component filltimerecord3 = Box.createRigidArea(new Dimension(570,30));		
		
		jlineaTimerecord.add(filltimerecord1);
		jlineaTimerecord.add(jtimerecorddesc);
		jlineaTimerecord.add(filltimerecord2);
		jlineaTimerecord.add(jtimerecordcosto);
		jlineaTimerecord.add(filltimerecord3);
		
		return jlineaTimerecord;
	}
	
	/**
	 * /**
	 * crea pannello per mostrare il costro dello specifico sottoprogetto
	 * @param lineaRegola
	 * @return
	 */
	private JPanel createPannelloLineaRegola(ELineaRegola lineaRegola)
	{
		JPanel jlineaFattura= new JPanel();
		jlineaFattura.setBounds(0, 0, 1230, 30);
		jlineaFattura.setLayout(new BoxLayout(jlineaFattura, BoxLayout.LINE_AXIS));
		jlineaFattura.setBackground(Color.WHITE);
		Font font = new Font(this.getFont().getFontName(), this.getFont().getStyle(), 14);	
		
		Component fillprogetto1 = Box.createRigidArea(new Dimension(75,30));		
		
		JLabel jregoladesc = new JLabel( "Regola: " + lineaRegola.getDescrizione() );
		jregoladesc.setFont(font);
		jregoladesc.setMinimumSize(new Dimension(400, 30));
		jregoladesc.setMaximumSize(new Dimension(400, 30));		
		jregoladesc.setPreferredSize(new Dimension(400, 30));		
		
		Component fillprogetto2 = Box.createRigidArea(new Dimension(252,30));
		
		JLabel jregolacosto = new JLabel( lineaRegola.getSegno() + " " + lineaRegola.getCosto() + " " + lineaRegola.getMisura() );
		jregolacosto.setFont(font);
		jregolacosto.setMinimumSize(new Dimension(60, 30));
		jregolacosto.setMaximumSize(new Dimension(60, 30));		
		jregolacosto.setPreferredSize(new Dimension(60, 30));
		
		Component fillprogetto3 = Box.createRigidArea(new Dimension(570,30));	
		
		jlineaFattura.add(fillprogetto1);		
		jlineaFattura.add(jregoladesc);
		jlineaFattura.add(fillprogetto2);
		jlineaFattura.add(jregolacosto);
		jlineaFattura.add(fillprogetto3);		
		
		return jlineaFattura;
	}		
	
}
